<?php
/**
 * 登録内容変更業務
 *
 */
require_once dirname(__FILE__) . '/StaffController.php';
require_once APPLICATION_PATH . '/models/Site.php';

/**
 * 登録内容変更業務
 *
 */
class ChangeregistController extends Zend_Controller_Action
{
	/** 入力フォーム：パスワード */
	const INPUT_FORM_PASSWORD = 'password';
	/** 入力フォーム：チーム名 */
	const INPUT_FORM_TEAMNAME = 'teamname';
	/** 入力フォーム：メールアドレス */
	const INPUT_FORM_MAILADDRESS = 'mail';
	/** 入力フォーム：チーム所有サイロURL */
	const INPUT_FORM_TEAMSITE_URL = 'teamsiteurl';
	/** 入力フォーム：入力フォーム名 */
	const INPUT_FORM_NAME = 'changeregist';

	/**
	 * ログインユーザのサイト利用届出用紙
	 * @var Models_Site
	 */
	protected $_registPaper;
	/**
	 * サイト利用届出用紙バインダー
	 * @var ArrayObject
	 */
	protected $_registBinder;
	/**
	 * サイト利用届出用紙バインダーオブジェクト
	 * @var Binder
	 */
	protected $_registBinderObject;

	public function init()
	{
		/*** ログインUIDを取得する */
		$uid = StaffController::getLoginId();
		/*** ログインUIDが取得できない（未ログイン）の場合、ログイン画面に遷移する */
		if ($uid == '') {
			$this->_redirect('/Staff/login');
			exit();
		}
		/*** サイト利用届出用紙バインダーを持ち出す */
		$this->_registBinderObject = SiteController::getBinder(FALSE);
		$this->_registBinder = $this->_registBinderObject->get_pages();
		/*** ログインユーザのサイト利用届出用紙がなければ、ログイン画面に遷移する */
		if (!isset($this->_registBinder[$uid])) {
			$this->_redirect('/Staff/login');
			exit();
		}
		/*** ログインユーザーのサイト利用届出用紙を持ち出す */
		$this->_registPaper = $this->_registBinder[$uid];
	}

	/**
	 * 変更内容入力画面
	 */
	public function editAction()
	{
		$this->view->teamName = $this->_registPaper->get_teamname();
		$this->view->mailAddress = $this->_registPaper->get_mailaddress();
		$this->view->teamSiteUrl = $this->_registPaper->チーム所有サイトURLを返す();
		$this->view->submitAction  = '/Changeregist/confirm';
		$this->view->cancelAction = '/Staff/menu';
	}

	/**
	 * 入力内容確認画面
	 */
	public function confirmAction()
	{
		$this->view->teamName = Lib_Request::get(self::INPUT_FORM_TEAMNAME);
		$this->view->mailAddress= Lib_Request::get(self::INPUT_FORM_MAILADDRESS);
		$this->view->cancelAction = '/Changeregist/edit';
		$this->view->submitAction = '/Changeregist/submit';
		if ($this->_checkDuplicateMailAddress()) {
			$this->view->mailAddressDupulicateFlg = TRUE;
		}
	}

	/**
	 * 変更確定画面
	 */
	public function submitAction()
	{
		/*** サイト利用登録バインダーを更新モードに変更。失敗ならエラー画面へ遷移 */
		if (!$this->_registBinderObject->changeUpdateFlg(TRUE)) {
			$this->_redirect('/Error');
			exit();
		}
		$this->_registPaper->set_teamname(Lib_Request::get(self::INPUT_FORM_TEAMNAME));
		$this->_registPaper->set_mailaddress(Lib_Request::get(self::INPUT_FORM_MAILADDRESS));
		$this->_registPaper->チーム所有サイトURLを設定する(Lib_Request::get(self::INPUT_FORM_TEAMSITE_URL));
	}

	/**
	 * 変更されたメールアドレスが既に登録済みである場合TRUEを返す
	 * メールアドレスが変更されていない場合は、FALSEを返す
	 * @return boolean
	 */
	protected function _checkDuplicateMailAddress()
	{
		/*** メールアドレスが変更されていない場合は、FALSEを返す */
		if ($this->view->mailAddress == $this->_registPaper->get_mailaddress()){
			return FALSE;
		}
		/*** サイト利用届け出用紙バインダー全件捜査 */
		foreach ($this->_registBinder as $registPaper) {
			/*** サイト利用届け出用紙か否か判定 */
			if ($registPaper instanceof Models_Site) {
				/*** メールアドレス既存判定 */
				if ($registPaper->get_mailaddress() == $this->view->mailAddress) {
					return TRUE;
				}
			}
		}
		return FALSE;
	}
}